[初心者向け]DataformでViewを作ってみる

[初心者向け]DataformでViewを作ってみる

Dataformを使ってViewを作成する方法をリファレンスをもとに書いてみました。
Clock Icon2024.09.25

概要

Google Cloudで手軽に使えるデータパイプラインサービスのDataformではテーブル以外にもViewを作ることができます。この記事では実際にView作成を通して、DataformでどうやってViewを作成するのかや他にどういったものを作成できるのかをみていきます。

Dataformで作成できるテーブルについて

Dataformではconfigブロックでテーブル型定義を設定することで作成するテーブルタイプを決めることができます。
https://cloud.google.com/dataform/docs/define-table?hl=ja
記法は以下の通りです。

config { type: "TABLE_TYPE" }

TABLE_TYPEには3つのタイプが設定可能です。

タイプ 説明
table テーブル
incremental 増分更新テーブル
view ビュー(View)。マテリアライズドビューも可能

incrementalに関しては以下のリファレンスを参照ください。
https://cloud.google.com/dataform/docs/incremental-tables?hl=ja

今回はTABLE_TYPEviewを設定してViewを作成してみます。

やってみる

今回作ってみるもののイメージは以下です。
スクリーンショット 2024-09-25 20.05.00

  1. Tableを作成します
  2. 作成したTableを参照するViewを作成します

とても簡単な流れです。
それではやってみましょう。

Table作成

Dataformのワークスペースを開いて
新規ファイル作成でdefinitionsフォルダ内にcreate_test_table.sqlxという名前でファイルを作成します。

sql
config {
  type: "table",
}
SELECT 
  "test_taro" AS name, 
  "kanagawa" AS address,
  JSON """{
    "id": 10,
    "pref":
        {
            "city":
            [
                { "id": 1, "type": "chuorinkan" }            
            ]
        }
  }""" AS json_col

Tableを作成するのでconfigブロックのtypeにはtableを指定します。
作成したら一度ワークフローを実行してTableを作成します。
このテーブルはテスト用ですのでテストデータを設定しています。

Viewを作成

いよいよ本命のViewを作成します。
新規ファイル作成でdefinitions配下にcreate_test_view.sqlxの名前でファイルを作成します。
Viewを作成するときはconfigブロックのtypeviewを指定します。
また、わかりやすいように日本語の列名を設定してみました(BigQueryでは日本語列名を使用可能です)。

sql
config {
  type: "view",
}
SELECT 
  name    AS `氏名`,
  address AS `住所`,
  json_col AS `JSON型列名`
FROM
  ${ref("create_test_table")}

ref関数を用いてTableを参照することでDataformの依存関係を設定することができます。

${ref("create_test_table")}

上記の実装をした後に、DataformのDAGを見てみます。
スクリーンショット 2024-09-25 19.19.26

思い描いた通りになりました!
ではではワークフローを実行してみます。
create_test_view.sqlxを開いた状態で実行を開始を押下して、
操作create_test_viewを選択します。
スクリーンショット 2024-09-25 19.22.07

実行オプションで依存関係を含めるにチェックして実行を開始を押下します。
押下したらEXECUTIONSより実行履歴を見てみます。
スクリーンショット 2024-09-25 19.26.52
ステータスが緑のチェックになっていたら実行成功です。

確認してみる

該当のTableとViewが作成されているか確認してみます。
(作成されるデータセットはdataform.jsonなどの設定によります)

まずはTableから。
スクリーンショット 2024-09-25 19.28.31
問題なく作成されていますね。JSON型の列もできています。
次にViewを見てみます。
スクリーンショット 2024-09-25 19.28.39

日本語で列名が設定されたViewができていますね。
試しにクエリしてみます。
スクリーンショット 2024-09-25 19.30.30

問題なくデータ取得できました。検証完了です。

まとめ

まずは3行でまとめます。

  1. DataformでViewを作成できる
  2. 日本語列も設定できる(当たり前ですが)
  3. 依存関係を設定してViewを作成できる

View作成の前処理でELT処理を行なってViewを作成する、そんなデータパイプラインも
Dataformでは作成できることがわかります。
View作成はデータパイプラインに組み込まずとも手動で作成するということも当然ありですが、手動で作成する場合管理が漏れてしまいELT処理で修正した際の反映が漏れるというようなこともあるかもしれません(列追加や列名変更など)。
データパイプラインにView作成も組み込んでおくことでそうした漏れの発生を低減することができるかもしれません。
ワークロードによっていはデータパイプラインにView作成を盛り込むのもありなのかもな、と思います。

それではまた。ナマステー

参考

https://cloud.google.com/dataform/docs/define-table?hl=ja

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.